Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Node / ReticulumProjects / MeshChatX.git / files / docs / en / audio-calls.md

Displaying Raw • View renderedDownload


docs/en/audio-calls.md master (f0f6ed57) Text, 4.01 KB

Tc9d1d9# Audio calls (LXST)

MeshChatX uses LXST for voice telephony over Reticulum. Telephone functionality is optional and controlled per identity in settings.

Tc9d1d9## Enable telephony

Turn on **telephone** in settings before using the **Call** page. MeshChatX announces your callable destination under aspect Ta5d6ff`lxst.telephony` when announcing is enabled.

Peers who announce the same aspect appear as callable contacts.

Tc9d1d9## Placing and receiving calls

From **Call** or a contact entry you can:

Tff7b72- **Dial** another identity by hash
Tff7b72- **Answer** or **decline** inbound rings
Tff7b72- **Hang up** an active session
Tff7b72- **Mute** microphone (transmit) or speaker (receive)
Tff7b72- Switch **full duplex** or **half duplex** during a live call
Tff7b72- Use **push-to-talk** while in half duplex (hold the PTT control or Space)

Half duplex uses LXST packetizer squelch so idle airtime stays low on constrained links. Full duplex keeps both directions open.

Call state changes arrive over the WebSocket (Ta5d6ff`telephone_ringing`, Ta5d6ff`telephone_call_established`, Ta5d6ff`telephone_call_ended`, and related events).

While connected, the Call screen shows link stats (packets, bytes, approximate bitrates, path hops, and interface).

Tc9d1d9## Audio path

The frontend loads Codec2 assets for voice encoding (Ta5d6ff`Codec2Loader.js`). Browser and Electron builds use a Web Audio bridge at Ta5d6ff`/ws/telephone/audio`. Packaged desktop builds bundle the backend that negotiates LXST sessions.

Tc9d1d9## Voicemail

When you miss a call, voicemail may be offered depending on settings:

Tff7b72- Record a custom greeting
Tff7b72- Upload or generate greeting audio
Tff7b72- Play back messages left for you

Voicemail events surface as Ta5d6ff`new_voicemail` on the WebSocket.

Tc9d1d9## Call history and recordings

The **Call** area keeps history of placed, received, and missed calls. You can record calls when the feature is enabled and policy allows storage on your device.

Unread missed calls show as a red count on the Calls sidebar icon and the header phone button. Opening the Call page clears that count. Desktop and Android still show a one-shot missed-call notification when the event happens.

Tc9d1d9## Ringtones

Upload custom ringtones and assign them per contact. Default sounds are used when no override exists.

Tc9d1d9## Do not disturb and contacts-only

Settings support:

Tff7b72- **Do not disturb** to silence inbound rings
Tff7b72- **Contacts-only** mode to reject calls from unknown hashes

Combine these with the **Blocked** list for finer control.

Tc9d1d9## Telephone contacts

Import and export telephone contacts separately from LXMF conversation peers. Contacts drive caller display names and ringtone overrides.

Tc9d1d9## Call setup flow

Ta5d6ff```
Caller UI: initiate call
|
v
GET /api/v1/telephone/call/{identity_hash}
|
v
LXST Telephone session over Reticulum
|
+--> Signalling and media via LXST
|
+--> /ws/telephone/audio (browser audio bridge)
|
v
Callee UI: ring, answer, or decline
```

Tc9d1d9## Tips

Tff7b72- Verify **Interfaces** and paths before troubleshooting audio quality. Packet loss on the mesh affects voice.
Tff7b72- Use headphones on mobile and Quest builds to prevent echo.
Tff7b72- Review microphone permissions in Electron or the Android system settings if the UI shows no input level.
Tff7b72- Keep LXST and Reticulum versions aligned with MeshChatX release notes when upgrading.
Tff7b72- **Docker / headless web**: containers have no PulseAudio host devices. MeshChatX forces the web audio bridge (Ta5d6ff`MESHCHAT_FORCE_WEB_AUDIO=1`) and installs hostless LXST backends so calls can use the browser mic/speaker. Enable telephone in settings, then place a call from the web UI over HTTPS.
Tff7b72- **Android Codec2**: native Ta5d6ff`libcodec2.so` must be preloaded before Ta5d6ff`pycodec2`. If Codec2 profiles are hidden, check Ta5d6ff`/api/v1/telephone/codec2/status` and rebuild with vendor wheels that bundle Ta5d6ff`pycodec2/libcodec2.so`.

Tc9d1d9## See also

Tff7b72- **LXMF messaging** for text conversations with the same peers
Tff7b72- **Identities, privacy, and security** for HTTPS and local access controls
Tff7b72- LXST project documentation for codec and session details


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────